import { reactive, toRefs } from "vue"
import { onLoad } from "@dcloudio/uni-app";
import { LoginStore } from "@/store/modules/login";
const uniIdCo = uniCloud.importObject("uni-id-co", { customUI: true })
/**
 * @description  微信登录逻辑封装
 * @param rules 表单校验规则
 * */
export const useWeixin = (rules) => {
    const state = reactive({
        weixinAuthService: null,
        uniIdRedirectUrl: '', //注册前所在的页面地址
    });

    onLoad(async (e) => {
        //检查当前环境是否支持这种登录方式
        // #ifdef APP
        let isAppExist = true
        await new Promise((callback) => {
            plus.oauth.getServices(oauthServices => {
                let index = oauthServices.findIndex(e => e.id == 'weixin')
                if (index != -1) {
                    state.weixinAuthService = oauthServices[index]
                    isAppExist = oauthServices[index].nativeClient
                    callback()
                } else {
                    return uni.showToast({
                        title: '当前设备不支持此登录，请选择其他登录方式',
                        icon: 'none',
                        duration: 3000
                    });
                }
            }, err => {
                throw new Error('获取服务供应商失败：' + JSON.stringify(err))
            })
        })
        // #endif
        if (e.uniIdRedirectUrl) {
            state.uniIdRedirectUrl = decodeURIComponent(e.uniIdRedirectUrl)
        }
        // #ifdef MP-WEIXIN
        if (getCurrentPages().length === 1) {
            uni.hideHomeButton()
            console.log('已隐藏：返回首页按钮');
        }
        // #endif
    })
    // 微信授权登录请求封装
    const oauth = () => {
        return new Promise((resolve, reject) => {
            // authorize 授权 5+文档
            // #ifdef APP
            state.weixinAuthService.authorize(function (res) {
                // 使用微信登录必须拿到code  获取Code有两种方法 一种的5+的原生方式 一种是uni.login 必须配置微信appsecret
                resolve(res.code)
            }, function (err) {
                console.error(err)
                reject(new Error('微信登录失败'))
            });
            // #endif

            // 小程序登录
            // #ifdef MP-WEIXIN
            uni.login({
                provider: 'weixin',
                success (res) {
                    resolve(res.code)
                },
                fail (err) {
                    console.error('授权登录失败：' + JSON.stringify(err));
                    reject(new Error('微信登录失败'))
                }
            })
            // #endif
        })
    }

    const wxLogin = async () => {
        const code = await oauth()
        uniIdCo.loginByWeixin({ code, inviteCode }).then(res => {
            // uni.showToast({
            //     title: '登录成功',
            //     icon: 'none',
            //     duration: 2000
            // });
            state.verifyStyleCode = res.errCode
            // 用于登录成功时需要配置的逻辑（如存储信息，记录设备，记录登录日志）
            const LoginState = LoginStore()
            LoginState.loginSuccess({ ...res, toastText: '登录成功',uniIdRedirectUrl: state.uniIdRedirectUrl })
        }).catch(e => {
            uni.showToast({
                title: e.errMsg,
                icon: 'none',
                duration: 2000
            });
        })
    }


    return {
        ...toRefs(state),
        wxLogin
    };
};